💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    변수와 입력 | ✅저자: 이유정(박사)

    🔹 변수 만들기/사용하기

    변수(variable)는 값을 저장해두고, 나중에 이름으로 꺼내서 사용합니다.
    쉽게 말하면 "값에 붙이는 이름표"라고 생각하면 됩니다.
    

    </> 예시코드: 변수 만들고 출력하기

    name = "Eunice"  # 이름 저장
    age = 20        # 나이 저장
    
    print("이름:", name)
    print("나이:", age)
    

    🖨️ 출력결과:

    이름: Eunice
    나이: 20
    

    🔹 변수 사용 범위와 예시

    ✅ 1. 기본 자료형 담기

    x = 10
    y = 3.14
    name = "Eunice"
    is_valid = True
    
    print(x, y, name, is_valid)
    

    🖨️ 출력 결과:

    10 3.14 Eunice True
    

    🔍 해설:

    • 변수는 숫자, 문자열, 불리언과 같은 기본 데이터를 담을 수 있습니다.
    • x, y, name, is_valid는 각각 정수, 실수, 문자열, 참/거짓 값

    ✅ 2. 컬렉션 자료형 담기

    lst = [1, 2, 3]
    tpl = (4, 5, 6)
    dct = {"a": 1, "b": 2}
    st = {1, 2, 3}
    
    print(lst)
    print(tpl)
    print(dct)
    print(st)
    

    🖨️ 출력 결과:

    [1, 2, 3]
    (4, 5, 6)
    {'a': 1, 'b': 2}
    {1, 2, 3}
    

    🔍 해설:

    • 리스트, 튜플, 딕셔너리, 집합 등 복합 데이터도 변수에 저장 가능합니다.

    📘 용어정리:

    • 컬렉션(Collection): 여러 개의 값을 하나로 묶는 자료형의 총칭 (리스트, 튜플, 딕셔너리, 세트 모두 포함)
    • 시퀀스(Sequence): 값들이 순서(index)를 가지고 있는 컬렉션 (리스트, 튜플, 문자열 등)
    • 비시퀀스형: 순서 없음, 대신 키 기반 접근 또는 중복 불가 (딕셔너리, 집합 등)

    ✅ 3. 함수를 변수에 저장

    def greet(name):
        return f"Hello, {name}!"
    
    say_hello = greet
    print(say_hello("Eunice"))
    

    🖨️ 출력 결과:

    Hello, Eunice!
    

    🔍 해설:

    • 함수 greetsay_hello라는 변수에 저장해서 다른 이름으로 호출 가능
    • 파이썬은 함수를 일급 객체로 다루므로 변수에 담을 수 있습니다.

    ✅ 4. lambda (익명 함수)

    double = lambda x: x * 2
    print(double(5))
    

    🖨️ 출력 결과:

    10
    

    🔍 해설:

    • lambda는 간단한 함수를 한 줄로 정의할 때 사용
    • double은 입력값을 2배로 곱해주는 함수

    ✅ 5. 클래스를 변수에 저장

    class Cat:
        def sound(self):
            return "Meow"
    
    Pet = Cat  # 클래스 자체를 변수에 저장
    c = Pet()
    print(c.sound())
    

    🖨️ 출력 결과:

    Meow
    

    🔍 해설:

    • 클래스 자체도 변수에 저장 가능 (Pet = Cat)
    • Pet()Cat()과 동일한 역할 수행

    ✅ 6. 클래스 인스턴스를 변수에 저장

    dog = Cat()
    print(dog.sound())
    

    🖨️ 출력 결과:

    Meow
    

    🔍 해설:

    • Cat()은 객체(인스턴스)를 생성하고 dog이라는 변수에 저장
    • 객체는 .을 사용하여 함수(메서드)를 호출할 수 있음

    ✅ 7. 모듈을 변수로 사용

    import math
    
    m = math
    print(m.sqrt(16))
    

    🖨️ 출력 결과:

    4.0
    

    🔍 해설:

    • math 모듈을 m이라는 변수에 저장해서 사용할 수 있음
    • math.sqrt() 대신 m.sqrt()로 접근

    ✅ 8. 함수 안에서 함수 반환 (클로저)

    def outer():
        def inner():
            return "I'm inner"
        return inner
    
    f = outer()
    print(f())
    

    🖨️ 출력 결과:

    I'm inner
    

    🔍 해설:

    • 함수 안에서 함수를 정의하고 리턴 → 이를 클로저(closure)라고 함
    • outer() 실행 결과로 반환된 inner 함수가 f에 저장됨

    ✅ 9. 표현식을 변수에 저장 (조건문, 리스트 내포)

    age = 19
    status = "성인" if age >= 20 else "미성년자"
    print(status)
    
    squares = [x**2 for x in range(5)]
    print(squares)
    

    🖨️ 출력 결과:

    미성년자
    [0, 1, 4, 9, 16]
    

    🔍 해설:

    • 삼항 조건문으로 조건 결과를 저장
    • 리스트 내포로 계산 결과를 리스트에 저장

    ✅ 10. 데코레이터처럼 함수 래핑해서 저장

    def decorator(fn):
        def wrapper():
            print("Before")
            fn()
            print("After")
        return wrapper
    
    def hello():
        print("Hello")
    
    hello = decorator(hello)
    hello()
    

    🖨️ 출력 결과:

    Before
    Hello
    After
    

    🔍 해설:

    • 함수 hellodecorator로 감싸고 변수에 다시 저장
    • 변수는 이렇게 포장된 함수도 저장할 수 있음

    ✅ 11. 타입도 변수에 저장 가능

    to_int = int
    print(to_int("123"))
    

    🖨️ 출력 결과:

    123
    

    🔍 해설:

    • int, str, float 같은 타입(자료형 변환 함수)도 변수에 담아 사용할 수 있음

    ✅ 12. 메서드를 변수에 저장

    obj = Cat()
    speak = obj.sound
    print(speak())
    

    🖨️ 출력 결과:

    Meow
    

    🔍 해설:

    • 객체의 메서드를 speak에 저장해도 함수처럼 호출 가능
    • obj.sound()와 동일

    ✅ 총정리 표
    가능한 저장 대상 예시 변수 설명
    숫자/문자/불리언 x = 10 기본 자료형
    리스트/딕셔너리 등 lst = [1, 2, 3] 컬렉션
    함수 say_hello = greet 함수 자체 저장 가능
    람다식 double = lambda x: x*2 간단 함수
    클래스 Pet = Cat 클래스 자체 저장 가능
    인스턴스 cat = Cat() 객체 저장
    모듈 m = math 모듈 참조 저장
    표현식 결과 squares = [x**2 for x in range(5)] 결과 저장
    메서드 speak = obj.sound 메서드 저장
    자료형 함수 to_int = int 타입 자체 저장 가능

    🔹 복합 대입 연산자

    기존 변수의 값에 더하거나(+), 빼거나(-), 곱하거나(*), 나누는(/) 
    연산을 짧고 간단하게 표현하는 방법입니다.
    

    ✏️ 해석:
    "변수 = 변수 + 숫자" 이렇게 길게 쓰지 말고,
    "변수 += 숫자" 처럼 한 번에 적자!

    ◽ 대표 복합 대입 연산자 표
    연산자 의미 긴 표현 짧은 표현 예시 결과
    += 더하고 저장 x = x + 2 x += 2 x = 3 → 5
    -= 빼고 저장 x = x - 1 x -= 1 x = 3 → 2
    *= 곱하고 저장 x = x * 3 x *= 3 x = 3 → 9
    /= 나누고 저장 x = x / 2 x /= 2 x = 3 → 1.5

    </> 예시코드: 더하고 저장 (+=)

    score = 10
    score += 5
    
    print(score) # 15
    

    </> 예시코드: 빼고 저장 (-=)

    	num = 8
    	num -= 3  # num에서 3을 뺌
    	print(num) # 5
    

    </> 예시코드: 곱하고 저장 (*=)

    count = 4 
    count *= 3  # count에 3을 곱함 
    
    print(count) # 12
    

    </> 예시코드: 나누고 저장 (/=)

    length = 9 
    length /= 3  # length를 3으로 나눔 
    
    print(length) # 3.0
    

    🔍 해설: 9 / 3 = 3.0 ( 나누기는 항상 소수점으로 결과가 나옴)


    📝 문제1 ] 다음 코드의 출력 결과는 무엇일까요?

    a = 10
    b = 3
    
    a += b  # a = 10 + 3 == 13 
    b *= 2  # b = 3 * 2 == 6 
    a //= b # a = 13 // 6  == 2
    b **= 2 # b = 6 * 6 == 36
    a %= 5 # a = 2 % 5 == 2
    
    print(f"a = {a}") # 2
    print(f"b = {b}")
    

    📝 문제2 ] 다음 코드의 출력 결과는 무엇일까요?

    x = 8
    y = 4
    
    x *= y
    y -= 1
    x /= y 
    y **= 2
    x += y 
    
    print(f"x = {x}")  # x = 19.666666666666668
    print(f"y = {y}")  # y = 9
    

    🔹 사용자 입력: input()

    사용자에게 직접 값을 입력 받는 함수
    사용자가 입력한 값은 보기에는 숫자처럼 보여도, 사실은 글자(문자열)
    입니다. 그래서 숫자 계산을 하려면 '숫자로 변환(int)'을 해줘야 한다.
    

    </> 예시코드: 기본 사용법

    	name = input("당신의 이름은? ")
    	print("안녕하세요,", name + "님!")
    

    🖨️ 출력 결과:

    당신의 이름은? 홍길동
    안녕하세요, 홍길동님!
    

    🔍 해설: input() 함수는 사용자가 입력할 때까지 기다립니다. 사용자가 "홍길동"이라고 입력하면 name 변수에 "홍길동"이라는 문자열이 저장됩니다. print()에서는 문자열끼리 이어붙이기(+)가 가능해서 문제 없이 출력됩니다.


    </> 예시코드: 숫자 입력 시 주의 (자료형 변환 필요)

    	age = input("나이를 입력하세요: ")
    	print(age, type(age))  # 입력값 확인
    	age = int(age)         # 문자열을 정수(int)로 변환
    	print("10년 후 나이:", age + 10)          
    

    🖨️ 출력 결과:

    나이를 입력하세요: 20
    "20" <class 'str'>
    10년 후 나이: 30
    

    🔍 해설: input()으로 입력받으면 20이 숫자처럼 보이는 것도 사실은 문자열이고, 숫자처럼 계산하려면 int(age)정수형(int) 으로 변환해줘야 합니다. 변환을 하지 않고 문자열 +


    📝 문제1] 문자열 + 숫자 에러 다음 코드에서 어떤 문제가 발생하며, 어떻게 코드를 수정해야 할까요?

    age = input("나이를 입력하세요: ")
    print("10년 후 나이:", age + 10)
    

    ❌문제 발생 이유 input()은 문자열을 반환하기 때문에 "20" + 10은 타입이 다르며, 문자열과 숫자는 덧셈(+)이 불가능해서 TypeError가 발생합니다.

    ⌨️ 코드수정:

    age = input("나이를 입력하세요: ")
    age = int(age)  # 정수형으로 변환
    print("10년 후 나이:", age + 10)
    

    📝 문제2] 숫자에 50 더하기 사용자가 입력한 숫자에 50을 더해서 출력하세요.

    num = input("숫자를 입력하세요: ")
    

    ✅정답:

    num = input("숫자를 입력하세요: ")
    num = int(num)
    print("50 더한 값:", num + 50)
    

    🖨️ 출력 결과:

    숫자를 입력하세요: 30
    50 더한 값: 80
    

    📝 문제3] 문자열 연결 출력하기 사용자에게 이름과 나이를 입력받아 다음과 같이 출력되도록 하세요:

    🖨️ 출력 결과:

    이름: 홍길동
    나이: 20
    홍길동님의 나이는 20살입니다.
    

    ✅정답:

    name = input("이름: ")
    age = input("나이: ")
    print(name + "님의 나이는 " + age + "살입니다.")
    

    🔍 해설: name, age 모두 문자열(str) 상태이므로 문자열끼리는 +로 이어 붙일 수 있습니다. 그래서 별다른 변환 없이 바로 연결해서 출력할수 있습니다.


    🔹문자열을 숫자로 바꾸기

    파이썬에서 숫자처럼 생긴 문자열(String)을 실제 숫자(Number)로 
    바꿔서 계산할 수 있습니다.
    int() → 정수로 변환, float() → 소수로 변환 
    
    ValueError 예외
    숫자로 바꿀 수 없는 글자를 숫자로 변환하려 하면 에러가 발생합니다.  
    이 문제를 대비하려면 미리 예외처리를 해야 합니다.
    

    </> 예시코드: ❌ ValueError 발생 예시

    	age = input("나이를 입력하세요: ")  # 예: "스물다섯"
    	print(int(age))  # ❌ ValueError 발생
    

    ❌ 🖨️ 출력 결과: 에러출력

    ValueError: invalid literal for int() with base 10: '스물다섯'
    

    </> 코드수정: 예외처리(try ~ except)로 안전하게 처리하기

    	try:
        age = int(input("나이를 입력하세요: "))
        print("입력한 나이:", age)
    	except ValueError:
    	    print("❗ 숫자로만 입력해주시기 바랍니다.")
    

    🖨️ 출력 결과:

    나이를 입력하세요: 스물다섯
    ❗ 숫자로만 입력해주시기 바랍니다.
    

    🔍 해설: try: 블록 안에서 에러가 발생하면, except: 블록으로 넘어가서 친절한 안내 문구를 출력하고 프로그램이 멈추지 않게 처리합니다.


    🔹 숫자와 문자열 변환

    구분 설명
    정수 변환 int()
    실수 변환 float()
    문자열 변환 str()
    자료형 확인 type()
    💬 보충설명:
    글자처럼 생긴 숫자는 int()float()로 변환해야 계산이 가능합니다.
    반대로, 숫자를 글자로 출력하거나 이어 붙일 때는 str()로 변환해야 합니다.
    TOP
    preload preload